package com.spring.redis.operation.service;

import com.spring.redis.operation.service.base.SetRedisBaseService;

import java.util.Set;

/**
 * redis Operation set interface
 *
 * @author zhouyu
 */
public interface SetRedisService extends SetRedisBaseService {

    /**
     * 将数据放入set缓存
     *
     * @param className 类名称
     * @param key       key
     * @param values    values
     * @return java.lang.Long 放入成功数
     */
    Long add(String className, String key, Object... values);

    /**
     * 将数据放入set缓存
     *
     * @param clazz  类名称
     * @param key    key
     * @param values values
     * @return java.lang.Long 放入成功数
     */
    Long add(Class<?> clazz, String key, Object... values);

    /**
     * 将数据放入set缓存,并设置过期时间
     *
     * @param className 类名称
     * @param key       key
     * @param time      过期时间,单位秒
     * @param values    values
     * @return java.lang.Long 成功个数
     */
    Long addExpire(String className, String key, Long time, Object... values);

    /**
     * 将数据放入set缓存,并设置过期时间
     *
     * @param clazz  类名称
     * @param key    key
     * @param time   过期时间,单位秒
     * @param values values
     * @return java.lang.Long 成功个数
     */
    Long addExpire(Class<?> clazz, String key, Long time, Object... values);

    /**
     * 根据key获取Set中的所有值
     *
     * @param className 类名称
     * @param key       key
     * @return java.util.Set<Object>
     */
    Set<Object> getAll(String className, String key);

    /**
     * 根据key获取Set中的所有值
     *
     * @param clazz 类名称
     * @param key   key
     * @return java.util.Set<Object>
     */
    Set<Object> getAll(Class<?> clazz, String key);

    /**
     * 根据key,value从一个set中查询,是否存在
     *
     * @param className 类名称
     * @param key       键
     * @param value     值
     * @return java.lang.Boolean 是否存在
     */
    Boolean hasKey(String className, String key, Object value);

    /**
     * 根据key,value从一个set中查询,是否存在
     *
     * @param clazz 类名称
     * @param key   键
     * @param value 值
     * @return java.lang.Boolean 是否存在
     */
    Boolean hasKey(Class<?> clazz, String key, Object value);

    /**
     * 获取set缓存的长度
     *
     * @param className 类名称
     * @param key       键
     * @return java.lang.Long set长度
     */
    Long size(String className, String key);

    /**
     * 获取set缓存的长度
     *
     * @param clazz 类名称
     * @param key   键
     * @return java.lang.Long set长度
     */
    Long size(Class<?> clazz, String key);

    /**
     * 移除值为value的
     *
     * @param className 类名称
     * @param key       键
     * @param values    值 可以是多个
     * @return java.lang.Long 移除的个数
     */
    Long remove(String className, String key, Object... values);

    /**
     * 移除值为value的
     *
     * @param clazz  类名称
     * @param key    键
     * @param values 值 可以是多个
     * @return java.lang.Long 移除的个数
     */
    Long remove(Class<?> clazz, String key, Object... values);

}
